package com.itheima.work;

import java.util.concurrent.locks.ReentrantLock;

/**
 * @auther Macrydy
 * @date 2020/7/7 18:57
 * 请使用“同步代码块”改写1.1的程序，保证运行结果的正确。
 * 1.3 题目三
 * 	 请使用“同步方法”改写1.1的程序，保证运行结果的正确。
 * 1.4 题目四
 * 	请使用“Lock锁”改写1.1的程序，保证运行结果的正确
 */
public class Test3 {
    public static void main(String[] args) {
        sellTicket st = new sellTicket();

        Thread t1 = new Thread(st, "窗口一");
        Thread t2 = new Thread(st, "窗口二");
        Thread t3 = new Thread(st, "窗口三");

        t1.start();
        t2.start();
        t3.start();
    }
}

class sellTicket implements Runnable {

//    private static int tickets = 100;
    private int tickets = 100;
    private ReentrantLock lock = new ReentrantLock();

    //1.4请使用“Lock锁”改写1.1的程序，保证运行结果的正确
    @Override
    public void run() {

        while (true) {
            lock.lock();
            if (tickets <= 0) {
                break;
            } else {
                tickets--;
                System.out.println(Thread.currentThread().getName() + "正在卖票，还剩余" + tickets + "张");
            }
            lock.unlock();
        }
    }

    //1.3 请使用“同步方法”改写1.1的程序，保证运行结果的正确
//    @Override
//    public void run() {
//        while (true){
//            boolean result = synchronizedMthod();
//            if (result){
//                break;
//            }
//        }
//    }
//
//    private static synchronized boolean synchronizedMthod() {
//        if(tickets == 0){
//            return true;
//        }else{
//            tickets--;
//            System.out.println(Thread.currentThread().getName() + "在卖票,还剩下" + tickets + "张票");
//            return false;
//        }
//    }

    //1.2请使用“同步代码块”改写1.1的程序，保证运行结果的正确。
//    @Override
//    public void run() {
//        while (true) {
//            synchronized (sellTicket.class){
//                if (tickets > 0) {
//                    tickets--;
//                    System.out.println(Thread.currentThread().getName() + "正在卖票，还剩余" + tickets + "张");
//                } else {
//                    System.out.println("卖完了");
//                    break;
//                }
//            }
//
//        }
//    }

    //1.1
//    @Override
//    public void run() {
//        while (true) {
//            if (tickets > 0) {
//                tickets--;
//                System.out.println(Thread.currentThread().getName() + "正在卖票，还剩余" + tickets + "张");
//            } else {
//                System.out.println("卖完了");
//                break;
//            }
//        }
//    }

}